package com.itany.corejava.code07_常用类.string;

/**
 * @author MissChen
 * @date 2024年02月27日 14:44
 */
public class Test01_创建方式 {
    public static void main(String[] args) {
        // 方式一:直接创建
        // 该方式本身来说:不符合引用数据类型的特性，不符合面向对象的规范
        // 原则上来讲：所有的引用数据类型都是通过new关键字进行创建的
        // 只有基本数据类型才能直接赋值
        // 由于String经常用，JVM对其做了优化
        // String是一种特殊的引用数据类型，支持直接赋值的方式
        // 直接赋值的方式进行比较时，只比较值，没有地址
        // 该方式的数据没有存储到堆中，而是存储到常量池中
        String s1="hello";
        String s2="hello";
        System.out.println(s1==s2);

        //方式二:使用构造方法创建
        //创建一个空字符串，在堆中分配了空间，空间中没有值
        String s3=new String();
        //直接赋值为空字符串，没有在堆中创建空间
        String s4="";
        System.out.println(s3==s4);//false
        System.out.println(s3.equals(s4));//true

        //将字符串赋值为null，此时在堆中没有创建空间
        String s5=null;
        System.out.println("-------------------");
        String s6=new String("hello");
        System.out.println(s1==s6);//false
        System.out.println(s1.equals(s6));//true

        //字符串可以与任意类型进行拼接
        System.out.println(s1+" world");
        System.out.println(s2+true);
        System.out.println(s3+1234);
    }
}
